iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 6
1

scope 範圍(或作用域)

scope 是變數可以被取用的區域

let

這是 ES6 新增的宣告方式,它很像 var,又有些不同

  1. 在宣告前,無法取值
console.log(c)
let c = true;
console.log(c)

在創造階段,一樣會初始化給予 undefind,差別的地方在於,如果在宣告 let c 想要取用 c 的話,引擎不讓你用,會報下面的錯誤:

> Uncaught ReferenceError: Cannot access 'c' before initialization

有些人可能會以為 let 沒有 hoisting,但其實還是有的,還是會初始化 undefind,只是會有 Temporal Dead Zone

  1. 區塊範圍

它讓 javascript 引擎使用了一個叫區塊範圍(block scoping)的東西。

這個區塊只要在大括號 {} 的範圍內都算,包括函數、if、for,例如在 for 迴圈內宣告變數,那每一圈的存放該變數的記憶體都不同

另外,當變數被宣告在區塊中,就只有該區塊可以使用。

備註

其實 ES6 的東西在本課程提到的不多(甚至 const 都沒提到),或許是因為 這堂課 推出的時間在 2015 ,那時 ES6 還沒正式推出。

所以我也沒有寫太多,因為我還是先專注在課堂上,我希望之後自己在寫專門的文章來介紹。

在這之前,特別推薦 Huli 寫的這篇 我知道你懂 hoisting,可是你了解到多深?,可以了解 const、let 和 hoisting 的關係,寫得非常清楚。

至於 const、let 和 var 的差異,我想 MDN 上也寫得很清楚。


上一篇
Day 5-變數環境、scope chain
下一篇
Day7-非同步回呼
系列文
跟我一起上課吧:了解 JavaScript 的奇怪部分7
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言